// 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

// 示例:

// 输入: [0,1,0,3,12]
// 输出: [1,3,12,0,0]
// 说明:

// 必须在原数组上操作，不能拷贝额外的数组。
// 尽量减少操作次数。

// https://leetcode-cn.com/problems/move-zeroes/description/

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
  let zeroCount = 1

  for (let i = 0, len = nums.length; i < len; i ++) {
    let num = nums[i]
    let j
    
    if (num === 0) {
      for (j = i + zeroCount; j < len; j ++) {
        if (nums[j] !== 0) {
          let t = nums[i]
          nums[i] = nums[j]
          nums[j] = t
          break
        } else {
          zeroCount ++
        }
      }
      // 如果最后一个元素已经被换成0，或者最后一个元素已经为0，则不继续换位
      if (j === len) {
        break
      }
    }
  }
};

let nums1 = [0,1,0,3,12]
moveZeroes(nums1)
console.log(nums1)